<?php
/**
 * 添加或修改商品时的有关商品属性的表单
 */
class GoodsFormModel extends Model {
	//栏目cid
	private $cid;
	public $table = 'goods_type';
	//构造函数
	public function __init() {
		$this -> cid = Q('cid', 0, 'intval');
	}

	//获取规格属性表单
	public function getSpec() {
		//查找商品属性
		$map['gtid'] = M('category') -> where("cid={$this->cid}") -> getField('gtid');
		$map['spec'] = 1;
		//适应人群   颜色    款式   材质
		$attrData = M('goods_attr') -> where($map) -> all();
		$formData = array();
		if (!$gid = Q('gid', 0, 'intval')) {
			//attr普通属性    spec规格属性
			foreach ($attrData as $n => $attr) {
				//读取属性值   比如：适应人群    就能读取出  儿童、中年
				$map['attr_aid'] = $attr['aid'];
				//比如颜色 ： 红  绿 蓝    适应人群就找  青年  中年
				$attrValue = M('goods_attr_value') -> where($map) -> all();
				//显示方式如radio,input
				$func = '_' . $attr['show_type'];
				$attr['html'] = $this -> _specSelect($attr, $attrValue);
				$data[$n] = $attr;
			}
			$data[] = array('attr_name' => '价格', 'html' => '<input type="text" name="spec[price][]" class="w100"/>');
			$data[] = array('attr_name' => '库存', 'html' => '<input type="text" name="spec[stock][]" class="w100"/>');
			$data[] = array('attr_name' => '货号', 'html' => '<input type="text" name="spec[sn][]" class="w100"/>');
			$formData[] = $data;
		} else {
			//取得所有库存
			$stock = M('stock') -> where('gid=' . $gid) -> all();
			foreach ($stock as $id=>$s) {
				$data=array();
				//attr普通属性    spec规格属性
				foreach ($attrData as $n => $attr) {
					$avid=M('stock_attr')->where("sid=".$s['sid'])->getField('avid,sid');
					//读取属性值   比如：适应人群    就能读取出  儿童、中年
					$map['attr_aid'] = $attr['aid'];
					//比如颜色 ： 红  绿 蓝    适应人群就找  青年  中年
					$attrValue = M('goods_attr_value') -> where($map) -> all();
					//显示方式如radio,input
					$func = '_' . $attr['show_type'];
					$attr['html'] = $this -> _specSelect($attr, $attrValue,$avid);
					$data[$n] = $attr;
				}
				//修改商品时记录旧商品库存id
				$data[$n]['html'].="<input type='hidden' name='spec[sid][]' value='{$s['sid']}' />";
				$data[] = array('attr_name' => '价格', 'html' => '<input type="text" name="spec[price][]" value="'.$s['price'].'" class="w100"/>');
				$data[] = array('attr_name' => '库存', 'html' => '<input type="text" name="spec[stock][]" value="'.$s['stock'].'"class="w100"/>');
				$data[] = array('attr_name' => '货号', 'html' => '<input type="text" name="spec[sn][]" value="'.$s['sn'].'"class="w100"/>');
				$formData[] = $data;
			}
		}
		return $formData;
	}

	//规格属性列表
	public function _specSelect($attr, $attrValue, $oldData = null) {
		$html = '';
		$html .= '<select name="spec[attr][select-' . $attr['aid'] . '][]">';
		foreach ($attrValue as $v) {
			if ($oldData && isset($oldData[$v['avid']])) {
				$selected = ' selected="" ';
			} else {
				$selected = '';
			}
			$html .= "<option $selected value='{$v['avid']}-{$v['av_value']}'>{$v['av_value']}</option>";
		}
		return $html . '</select>';
	}

	//获取普通属性表单
	public function getAttr() {
		//修改时会有商品gid,根据gid把原来的数据读出
		if ($gid = Q('gid', 0, 'intval')) {
			$oldData = M('goods_attr_list') -> where("gid={$gid}") -> getField('avid,attr_name');
		} else {
			$oldData = null;
		}
		//查找商品属性
		$map['gtid'] = M('category') -> where("cid={$this->cid}") -> getField('gtid');
		$map['spec'] = 0;
		//适应人群   颜色    款式   材质
		$attrData = M('goods_attr') -> where($map) -> all();
		//attr普通属性    spec规格属性
		$data = array();
		foreach ($attrData as $n => $attr) {
			//读取属性值   比如：适应人群    就能读取出  儿童、中年
			$map['attr_aid'] = $attr['aid'];
			//比如颜色 ： 红  绿 蓝    适应人群就找  青年  中年
			$attrValue = M('goods_attr_value') -> where($map) -> all();
			//显示方式如radio,input
			$func = '_' . $attr['show_type'];
			$attr['html'] = $this -> $func($attr, $attrValue, $oldData);
			$data[$n] = $attr;
		}
		return $data;
	}

	//单选框处理
	public function _radio($attr, $attrValue, $oldData) {
		$html = '';
		foreach ($attrValue as $v) {
			if ($oldData && isset($oldData[$v['avid']])) {
				$checked = ' checked="" ';
			} else {
				$checked = '';
			}
			$html .= "<input $checked type='radio' name='attr[radio-{$attr['aid']}]' value='{$v['avid']}-{$v['av_value']}'/> {$v['av_value']}";
		}
		return $html;
	}

	//复选框处理
	public function _checkbox($attr, $attrValue, $oldData) {
		$html = '';
		foreach ($attrValue as $v) {
			if ($oldData && isset($oldData[$v['avid']])) {
				$checked = ' checked="" ';
			} else {
				$checked = '';
			}
			$html .= "<input $checked type='checkbox' name='attr[checkbox-{$attr['aid']}-{$v['avid']}]' value='{$v['avid']}-{$v['av_value']}'/> {$v['av_value']}";
		}
		return $html;
	}

	//复选框处理
	public function _text($attr, $attrValue, $oldData) {
		//因为text类型只能有一个值
		$avid = $attrValue[0]['avid'];
		$av_value = $oldData ? $oldData[$avid] : $attrValue[0]['av_value'];
		$html = '<tr>';
		$html .= "<th>{$attr['attr_name']}</th><td>";
		$html .= "<input type='text' name='attr[text-{$attr['aid']}-{$avid}]' value='{$av_value}'/>";
		return $html . '</td></tr>';
	}

	//复选框处理
	public function _select($attr, $attrValue, $oldData) {
		$html = '';
		$html .= '<select name="attr[select-' . $attr['aid'] . ']">';
		foreach ($attrValue as $v) {
			if ($oldData && isset($oldData[$v['avid']])) {
				$selected = ' selected="" ';
			} else {
				$selected = '';
			}
			$html .= "<option $selected value='{$v['avid']}-{$v['av_value']}'>{$v['av_value']}</option>";
		}
		return $html . '</select>';
	}

}
